Advertisement
Guest User

Easy Character (v1.0) by Jack_Bauer

a guest
May 5th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.01 KB | None | 0 0
  1. //Einstellungen
  2. #define MAX_CHARACTER_NAME 50 //Maximale Zeichenanzahl im Namen des Charakters
  3. #define MAX_CHARACTERS 5 //Maximale Anzahl an Charaktern pro Spieler
  4. #define MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT 400 //Maximale Höhe der Kamerafahrt
  5. #define MAX_SWITCH_CHARACTER_ANIMATION_STEP_HEIGHT 4 //Anzahl der Erhöhungen
  6.  
  7. //Ab hier nur noch mit Bedacht ändern!
  8. new Text:switchCharacterGreenScreen;
  9.  
  10. //Informationsvariablen
  11. enum CHARACTER_INFO{
  12.     bool:_inUse = false,
  13.     _characterID,
  14.     _characterName[MAX_CHARACTER_NAME],
  15.     Float:_sX,
  16.     Float:_sY,
  17.     Float:_sZ,
  18.     Float:_sA
  19. };
  20. new characters[MAX_PLAYERS][MAX_CHARACTERS][CHARACTER_INFO];
  21. new cameraUpAmount[MAX_PLAYERS];
  22.  
  23. //Prototypes
  24. forward SwitchCharacterAnimationTimer(playerid, characterID, Float:x, Float:y, Float:z, direction);
  25.  
  26. forward OnSwitchComplete(playerid, characterID); //Wird aufgerufen, sobald der Wechsel vollendet wurde und der neue Charakter gespawnt wurde.
  27. forward OnSwitchUpperMost(playerid, characterID); //Wird aufgerufen, sobald die Kamera beim Switch an der höchsten Position ist - Interessant, um während dem Switch Daten zu laden
  28.  
  29. //Funktionen
  30. /*
  31. playerid - ID des Spielers, dem ein Charakter hinzugefügt werden soll
  32. characterName - Name des Charakters
  33. Float:sX - Spawn Position (X-Koordinate)
  34. Float:sY - Spawn Position (Y-Koordinate)
  35. Float:sZ - Spawn Position (Z-Koordinate)
  36. Float:sA - Ausrichtung des Spielers (Facing Angle)
  37.  
  38. return - ID des Charakters
  39. */
  40. stock AddCharacter(playerid, characterName[MAX_CHARACTER_NAME], Float:sX, Float:sY, Float:sZ, Float:sA){
  41.     for(new i=0; i<sizeof(characters[]); i++){
  42.         if(!characters[playerid][i][_inUse]){
  43.             format(characters[playerid][i][_characterName], MAX_CHARACTER_NAME, "%s", characterName);
  44.             characters[playerid][i][_sX] = sX;
  45.             characters[playerid][i][_sY] = sY;
  46.             characters[playerid][i][_sZ] = sZ;
  47.             characters[playerid][i][_sA] = sA;
  48.  
  49.             characters[playerid][i][_characterID] = i+1;
  50.             characters[playerid][i][_inUse] = true;
  51.             return i+1;
  52.         }
  53.     }
  54.     return 0;
  55. }
  56.  
  57. /*
  58. characterID - ID des Charakters
  59. result - Call by Reference:Name des Charakters
  60.  
  61. return - 1 (wenn Name gefunden / Charakter existiert) / 2 (wenn kein Name gefunden / Charakter existiert nicht)
  62. */
  63. stock GetCharacterName(characterID, result[MAX_CHARACTER_NAME]){
  64.     for(new i=0; i<sizeof(characters[]); i++){
  65.         if(characters[playerid][i][_characterID] == characterID){
  66.             format(result, sizeof(result), "%s", characters[playerid][i][_characterName]);
  67.             return 1;
  68.         }
  69.     }
  70.     return 0;
  71. }
  72.  
  73. /*
  74. characterName - Name des Charakters
  75.  
  76. return - ID des Charakters
  77. */
  78. stock GetCharacterID(characterName[MAX_CHARACTER_NAME]){
  79.     for(new i=0; i<sizeof(characters[]); i++){
  80.         if(!strcmp(characters[playerid][i][_characterName], characterName)){
  81.              return characters[playerid][i][_characterID];
  82.         }
  83.     }
  84.     return 0;
  85. }
  86.  
  87. /*
  88. characterID - ID des Charakters
  89. Float:sX - Call by reference:Spawn des Charakters (X-Koordinate)
  90. Float:sY - Call by reference:Spawn des Charakters (Y-Koordinate)
  91. Float:sZ - Call by reference:Spawn des Charakters (Z-Koordinate)
  92. Float:sA - Call by reference:Ausrichtung des Charakters (Facing Angle)
  93.  
  94. return - 1 (wenn Spawn gefunden / Charakter existiert) / 2 (wenn kein Spawn gefunden / Charakter existiert nicht)
  95. */
  96. stock GetCharacterSpawn(playerid, characterID, &Float:sX, &Float:sY, &Float:sZ, &Float:sA){
  97.     for(new i=0; i<sizeof(characters[]); i++){
  98.         if(characters[playerid][i][_characterID] == characterID){
  99.             sX = characters[playerid][i][_sX];
  100.             sY = characters[playerid][i][_sY];
  101.             sZ = characters[playerid][i][_sZ];
  102.             sA = characters[playerid][i][_sA];
  103.             return 1;
  104.         }
  105.     }
  106.     return 0;
  107. }
  108.  
  109. /*
  110. playerid - ID des Spielers, dessen aktueller Charakter abgefragt werden soll
  111.  
  112. return - ID des aktuellen Charakters
  113. */
  114. stock GetPlayerCharacterID(playerid){
  115.     if(IsPlayerConnected(playerid)) return GetPVarInt(playerid, "characterID");
  116.     return 0;
  117. }
  118.  
  119. /*
  120. playerid - ID des Spielers, dessen Charaktere ermittelt werden sollen
  121. result - Call by reference:Variable mit der Größe sizeof(characters[]), in welcher alle ID's gespeichert werden sollen.
  122.  
  123. return - Diese Funktion gibt keinen Wert zurück
  124. */
  125. stock GetPlayerCharacterList(playerid, result[MAX_CHARACTERS]){
  126.     if(IsPlayerConnected(playerid)){
  127.         for(new i=0; i<sizeof(characters[]); i++){
  128.             if(characters[playerid][i][_characterID] != 0) result[i] = characters[playerid][i][_characterID];
  129.         }
  130.         return 1;
  131.     }else{
  132.         return 0;
  133.     }
  134. }
  135.  
  136. /*
  137. playerid - ID des Spielers, dessen Charakter gewechselt werden soll
  138. characterID - ID des Charakters, zu dem gewechselt werden soll
  139.  
  140. return - Diese Funktion gibt keinen Wert zurück
  141. */
  142. stock SwitchCharacter(playerid, characterID){
  143.     new Float:x, Float:y, Float:z;
  144.     GetPlayerPos(playerid, x, y, z);
  145.     //SetPlayerCameraPos(playerid, x, y, z + 100);
  146.     InterpolateCameraPos(playerid, x, y, z, x, y, z + 100, 500, CAMERA_MOVE);
  147.     InterpolateCameraLookAt(playerid, x, y, z, x, y, z, 500, CAMERA_CUT);
  148.  
  149.     cameraUpAmount[playerid] = 100;
  150.    
  151.     switchCharacterGreenScreen = TextDrawCreate(641.500000, 1.500000, "-");
  152.     TextDrawLetterSize(switchCharacterGreenScreen, 0.000000, 49.391975);
  153.     TextDrawTextSize(switchCharacterGreenScreen, -2.000000, 0.000000);
  154.     TextDrawAlignment(switchCharacterGreenScreen, 1);
  155.     TextDrawColor(switchCharacterGreenScreen, 0);
  156.     TextDrawUseBox(switchCharacterGreenScreen, true);
  157.     TextDrawBoxColor(switchCharacterGreenScreen, 16711714);
  158.     TextDrawSetShadow(switchCharacterGreenScreen, 0);
  159.     TextDrawSetOutline(switchCharacterGreenScreen, 0);
  160.     TextDrawBackgroundColor(switchCharacterGreenScreen, 16711714);
  161.     TextDrawFont(switchCharacterGreenScreen, 0);
  162.     TextDrawShowForPlayer(playerid, switchCharacterGreenScreen);
  163.  
  164.     SetPVarInt(playerid, "switchCharacterAnimationTimerID", SetTimerEx("SwitchCharacterAnimationTimer", 2000, true, "iifffi", playerid, characterID,  x, y, z, 1));
  165.     return 1;
  166. }
  167.  
  168. //Timer Funktionen
  169. public SwitchCharacterAnimationTimer(playerid, characterID, Float:x, Float:y, Float:z, direction){
  170.     new Float:pPos[3], Float:pCamPos[3], Float:characterPos[4];
  171.  
  172.     GetPlayerCameraPos(playerid, pCamPos[0], pCamPos[1], pCamPos[2]);
  173.     GetCharacterSpawn(playerid, characterID, characterPos[0], characterPos[1], characterPos[2], characterPos[3]);
  174.     GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
  175.     SetPlayerFacingAngle(playerid, characterPos[3]);
  176.  
  177.     if(direction == 1){
  178.         cameraUpAmount[playerid] += MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT / MAX_SWITCH_CHARACTER_ANIMATION_STEP_HEIGHT;
  179.        
  180.         SetPlayerCameraPos(playerid, pPos[0], pPos[1], pPos[2] + cameraUpAmount[playerid]);
  181.         SetPlayerCameraLookAt(playerid, pPos[0], pPos[1], pPos[2]);
  182.         if(cameraUpAmount[playerid] == MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT){
  183.             OnSwitchUpperMost(playerid, characterID);
  184.  
  185.             TogglePlayerSpectating(playerid, true);
  186.             InterpolateCameraPos(playerid, pPos[0], pPos[1], pPos[2] + MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT, characterPos[0], characterPos[1], characterPos[2] + MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT, 2000, CAMERA_MOVE);
  187.            
  188.             KillTimer(GetPVarInt(playerid, "switchCharacterAnimationTimerID"));
  189.             SetPVarInt(playerid, "switchCharacterAnimationTimerID", SetTimerEx("SwitchCharacterAnimationTimer", 3000, true, "iifffi", playerid, characterID, characterPos[0], characterPos[1], characterPos[2], 2));
  190.         }
  191.     }else if(direction == 2){
  192.         cameraUpAmount[playerid] -= MAX_SWITCH_CHARACTER_ANIMATION_HEIGHT / MAX_SWITCH_CHARACTER_ANIMATION_STEP_HEIGHT;
  193.         if(cameraUpAmount[playerid] != 0){
  194.             SetPlayerCameraPos(playerid, characterPos[0], characterPos[1], characterPos[2] + cameraUpAmount[playerid]);
  195.             SetPlayerCameraLookAt(playerid, characterPos[0], characterPos[1], characterPos[2]);
  196.         }else{
  197.             TogglePlayerSpectating(playerid, false);
  198.            
  199.             SetPlayerPos(playerid, characterPos[0], characterPos[1], characterPos[2]);
  200.            
  201.             SetCameraBehindPlayer(playerid);
  202.            
  203.             KillTimer(GetPVarInt(playerid, "switchCharacterAnimationTimerID"));
  204.             TextDrawDestroy(switchCharacterGreenScreen);
  205.  
  206.             SetPVarInt(playerid, "characterID", characterID);
  207.             cameraUpAmount[playerid] = 0;
  208.  
  209.             OnSwitchComplete(playerid, characterID);
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement