예제 #1
0
/**
* update_inventory(void)
*
* @brief
* @param void
* @return void
*/
void update_inventory(void)
{
	uint32 i = 0;

	//frmMirage.lstInv.Clear

	//Show the inventory
	for(i = 1; i < MAX_INV; i++){
		if(player(myindex())->inv[i].id && player(myindex())->inv[i].id < MAX_ITEMS){
			if(item(player(myindex())->inv[i].id)->type == ITEM_TYPE_CURRENCY){
				//frmMirage.lstInv.AddItem i & ": " & Trim$(Item(GetPlayerInvItemNum(i)).Name) & " (" & GetPlayerInvItemValue(i) & ")"
			}
			else{
				//Check if this item is being worn
				uint8 x = 0;
				for(x = 0; x < EQUIPMENT_COUNT; x++){
					if(player(myindex())->equipment[x] == i){
						//frmMirage.lstInv.AddItem i & ": " & Trim$(Item(GetPlayerInvItemNum(i)).Name) & " (worn)"
					}
					else{
						//frmMirage.lstInv.AddItem i & ": " & Trim$(Item(GetPlayerInvItemNum(i)).Name)
					}
				}
			}
		}
		else{
			//frmMirage.lstInv.AddItem "<free inventory slot>"
		}
	}

	//frmMirage.lstInv.ListIndex = 0
}
예제 #2
0
/**
* check_direction(uint8 dir)
*
* @brief
* @param dir
* @return sboolean  true or false
*/
sbool check_direction(uint8 dir)
{
	uint32 x = player(myindex())->x;
	uint32 y = player(myindex())->y;
	uint32 i = 0;

	switch(dir){
	case DIR_UP: y--; break;
	case DIR_DOWN: y++; break;
	case DIR_LEFT: x--; break;
	case DIR_RIGHT: x++; break;
	}

	if(map()->tile[GETXY(x,y)].type == TILE_TYPE_BLOCKED)
		return TRUE;

	for(i = 0; i < players_on_map(); i++){
		if(player(player_on_map(i))->x == x && player(player_on_map(i))->y == y)
			return TRUE;
	}

	for(i = 0; i < MAX_MAP_NPCS; i++){
		if(map()->npc[i].num){
			if(map()->npc[i].x == x && map()->npc[i].y == y)
				return TRUE;
		}
	}

	return FALSE;
}
예제 #3
0
void send_player_move(void)
{
	buffer_t buffer;

	clear_buffer(&buffer);
	add_opcode(&buffer,CPLAYERMOVE);
	add_buffer(&buffer,&player(myindex())->dir, SIZE8);
	add_buffer(&buffer,&player(myindex())->moving, SIZE8);

	send_data(&buffer);
}
예제 #4
0
/**
* check_attack(void)
*
* @brief Check attack
* @param void
* @return void
*/
void check_attack(void)
{
	buffer_t buffer;
	if(tempdata()->control){
		if(player(myindex())->attacktimer + 1 < gettickcount()){
			if(!player(myindex())->attacking){
				player(myindex())->attacking = 1;
				player(myindex())->attacktimer = gettickcount();

				clear_buffer(&buffer);
				add_opcode(&buffer, CATTACK);
				socketsend(&buffer);
			}
		}
	}
}
예제 #5
0
/**
* cast_spell(void)
*
* @brief
* @param void
* @return void
*/
void cast_spell(void)
{
	buffer_t buffer;

	//Check for subscript out of range
	if(!tempdata()->spell_selected || tempdata()->spell_selected >= MAX_PLAYER_SPELLS)
		return;

	//Check if player has enough MP
	if(player(myindex())->spells[tempdata()->spell_selected]){
		if(player(myindex())->vitals[VITAL_MP] < spell(player(myindex())->spells[tempdata()->spell_selected])->mpreq){
			//	Call AddText("Not enough MP to cast " & Trim$(Spell(SpellSelected).Name) & ".", 12)
			return;
		}
		if(gettickcount() > player(myindex())->attacktimer + 1){
			if(player(myindex())->moving == 0){
				clear_buffer(&buffer);
				add_opcode(&buffer,CCAST);
				add_buffer(&buffer,&tempdata()->spell_selected, SIZE16);
				socketsend(&buffer);
				player(myindex())->attacking = TRUE;
				player(myindex())->attacktimer = gettickcount();
				tempdata()->castedspell = TRUE;
			}
			else{
				//Call AddText("Cannot cast while walking!", 12)
			}
		}
	}
	else{
		//Call AddText("No spell here.", 12)
	}
}
예제 #6
0
/**
* dev_msg(char *text, uint8 color)
*
* @brief
* @param text
* @param color
* @return void
*/
void dev_msg(char *text, uint8 color)
{
	if(tempdata()->ingame){
		if(player(myindex())->group >= GROUP_DEVELOPER){
			//Call AddText(Text, Color)
			printf("%s", text);
		}
	}
}
예제 #7
0
void request_new_map(void)
{
	buffer_t buffer;

	clear_buffer(&buffer);
	add_opcode(&buffer,CREQUESTNEWMAP);
	add_buffer(&buffer,&player(myindex())->dir, SIZE8);

	send_data(&buffer);
}
예제 #8
0
void send_player_dir(void)
{
	buffer_t buffer;

	clear_buffer(&buffer);
	add_opcode(&buffer,CPLAYERDIR);
	add_buffer(&buffer,&player(myindex())->dir, SIZE8);

	send_data(&buffer);
}
예제 #9
0
void get_players_on_map(void)
{
	int16 i = 0;
	uint16 array_index = 0;

	onmap_t.map_players = 0;

	if(online.players_online == 0){
		onmap_t.index[0] = myindex();
		onmap_t.map_players++;
		return;
	}

	for(i = 0; i <= online.players_online; i++){
		if(player_array[i].map == player_array[user_index].map){
			onmap_t.index[array_index] = i;
			array_index++;
			onmap_t.map_players++;
		}
	}
}
예제 #10
0
파일: exe4.c 프로젝트: Geovo/iCu
int main(int argc, char *argv[])
{
    // awesome code goes here:
    char *s = "hello there!";
    char x[20];
    mystrcpy(x, s);
    my_reverse(x);

    printf("%s\n---------------------\n", x);
    char z[] = "184";
    printf("%i\n", myatoi(z));

    char a[10];
    myitoa(a, 192);
    printf("%s\n", a);

    char h[] = "Kristian";
    int res = myindex(h, "s");
    printf("s is at position %i in 'Kristian'\n", res);

    return 0;
}
예제 #11
0
/**
* threadupdates(void)
*
* @brief
* @param void
* @return void
*/
void threadupdates(void)
{
	float hp = player(myindex())->vitals[VITAL_HP];
	float maxhp = player(myindex())->maxvitals[VITAL_HP];
	if(updatetiles){
		clear_map_tiles(); //make sure we unload unused images from the image buffer.
		update_map_tiles();

		updatetiles = FALSE;
	}

	if(update_user_bars){
		if(player(myindex())->maxvitals[VITAL_HP] >= 0)
			update_progressbar_value(&ingame_gui()->hpbar, ((float)player(myindex())->vitals[VITAL_HP] / (float)player(myindex())->maxvitals[VITAL_HP]) * 100.f);

		if(player(myindex())->maxvitals[VITAL_MP] >= 0)
			update_progressbar_value(&ingame_gui()->mpbar, ((float)player(myindex())->vitals[VITAL_MP] / (float)player(myindex())->maxvitals[VITAL_MP]) * 100.f);

		if(player(myindex())->maxvitals[VITAL_SP] >= 0)
			update_progressbar_value(&ingame_gui()->spbar, ((float)player(myindex())->vitals[VITAL_SP] / (float)player(myindex())->maxvitals[VITAL_SP]) * 100.f);

		update_user_bars = FALSE;
	}
}
예제 #12
0
coded_mini()

{

    FILE *fopen(),*fp3,*fp1;
    char line[MAXLINE],*fgets();
    char string1[MAXSTRING];
    char string2[MAXSTRING];
    char string3[MAXSTRING];
    char string4[MAXSTRING];
    char string5[MAXSTRING];
    char command[MAXSTRING];
    int i,j,cursor,linelength;
    int code_index,notany_index;

    if ( (fp3 = fopen(temp3,"w")) == NULL ) {
        fprintf(stderr,"fopen in coded_mini: can't create temp3\n");    
        exit(-1);
    }

    if ( (fp1 = fopen(temp1,"r")) == NULL ) {
        fprintf(stderr,"fopen in coded_mini: can't read temp1\n");    
        exit(-1);
    }

    if (TYPEFR) fputs(".type fr\n", fp3);
    if (ISYMB) {
        sprintf(string1,".i %d\n", inp_codelength + st_codelength); 
    } else {
        sprintf(string1,".i %d\n", inputfield + st_codelength); 
    }
    fputs(string1,fp3);
    /*printf("string1 = %s\n", string1);*/

    sprintf(string1,".o %d\n", st_codelength + outputfield -1); 
    fputs(string1,fp3);
    /*printf("string1 = %s\n", string1);*/

    while ( fgets(line,MAXLINE,fp1) != (char *) 0) {

	linelength = strlen(line);

        /* skip blank lines , comment lines and command lines */
	if ( (linelength == 1) || (myindex(line,"#") >= 0) || 
				     (myindex(line,".") >= 0) ) {
	    ;
        } else {

              /* takes care of proper inputs */
              if (ISYMB) {

	          for (i = 0; i < inputnum; i++) {
                      string2[i] = line[i];
	          }

                  string2[inputnum] = '\0';
                  /*printf("string2 = %s\n", string2);*/
	          code_index = myindex(string2,"1");
	          /*printf("index = %d\n", code_index);*/

		  if ( code_index != -1 ) {
	              strcpy(string2,inputs[code_index].code);
		  } else {
			for (j = 0; j < inp_codelength; j++) {
			    string2[j] = '-';
			}
			string2[inp_codelength] = '\0';
		  }

                  /*printf("string2 = %s\n", string2);*/
                  cursor = inputnum + 3;

	      } else {

	            for (i = 0; i < inputfield; i++) {
                        string2[i] = line[i];
	            }
                    string2[inputfield] = '\0';
                    /*printf("string2 = %s\n", string2);*/
                    cursor = inputfield + 3;

	      }

              /* takes care of present states */
              for (i = cursor; i < cursor + statenum; i++) {
                  string3[i-cursor] = line[i];
              }
              string3[statenum] = '\0';
              /*printf("string3 = %s\n", string3);*/
	      notany_index = myindex(string3,"0");
	      /*printf("notany_index = %d\n", notany_index);*/
              if ( notany_index != -1 ) {
	          code_index = myindex(string3,"1");
	          /*printf("code_index = %d\n", code_index);*/
	          strcpy(string3,states[code_index].code);
	      } else {
                    for (j = 0; j < st_codelength; j++) {
	                string3[j] = '-';
                    }
                    string3[st_codelength] = '\0';
	      }
              /*printf("string3 = %s\n", string3);*/
              cursor = i + 3;

              /* takes care of next states */
              for (i = cursor; i < cursor + statenum; i++) {
		  string4[i-cursor] = line[i];
              }
              string4[statenum] = '\0';
	      /*printf("string4 = %s\n", string4);*/
	      notany_index = myindex(string4,"0");
	      /*printf("notany_index = %d\n", notany_index);*/
              if ( notany_index != -1 ) {
	          code_index = myindex(string4,"1");
	          /*printf("code_index = %d\n", code_index);*/
	          strcpy(string4,states[code_index].code);
	      } else {
                    for (j = 0; j < st_codelength; j++) {
	                string4[j] = '-';
                    }
                    string4[st_codelength] = '\0';
	      }
              /*printf("string4 = %s\n", string4);*/
	      cursor = i + 1;

              /* takes care of proper outputs */
              for (i = cursor; i < cursor + outputfield; i++) {
                  string5[i-cursor] = line[i];
	      }
	      string5[outputfield] = '\0';
              /*printf("string5 = %s\n", string5);*/

	      sprintf(string1,"%s  %s   %s %s\n", string2, string3, string4, 
								     string5);
              fputs(string1,fp3);

	}

    }

    fclose(fp1);

    fclose(fp3);


    if (VERBOSE) printf("\nRunning Espresso from coded_mini\n");
    /*sprintf(command,"espresso -fr %s > %s", temp3, temp4);changed*/
    sprintf(command,"espresso %s > %s", temp3, temp4);
    system(command);
    if (VERBOSE) printf("Espresso terminated\n");


}
예제 #13
0
/**
* check_movement(void)
*
* @brief
* @param void
* @return void
*/
void check_movement(void)
{
	if(is_trying_to_move()){
		if(can_move()){
			if(tempdata()->shift)
				player(myindex())->moving = MOVEMENT_RUNNING;
			else
				player(myindex())->moving = MOVEMENT_WALKING;

			switch(player(myindex())->dir){
			case DIR_UP:
				send_player_move();
				player(myindex())->offsety = PIC_SIZE;
				player(myindex())->y--;
				break;
			case DIR_DOWN:
				send_player_move();
				player(myindex())->offsety = PIC_SIZE * -1;
				player(myindex())->y++;
				break;
			case DIR_LEFT:
				send_player_move();
				player(myindex())->offsetx = PIC_SIZE;
				player(myindex())->x--;
				break;
			case DIR_RIGHT:
				send_player_move();
				player(myindex())->offsetx = PIC_SIZE * -1;
				player(myindex())->x++;
				break;
			}

			if(player(myindex())->offsetx == 0 && player(myindex())->offsety == 0){
				if(map()->tile[GETXY(player(myindex())->x,player(myindex())->y)].type == TILE_TYPE_WARP){
					tempdata()->gettingmap = TRUE;
					tempdata()->canmovenow = FALSE;
				}
			}
		}
	}
}
예제 #14
0
/**
* can_move(void)
*
* @brief Determine if player is able to move
* @param void
* @return void
*/
sbool can_move(void)
{
	uint32 d;
	sbool ismap = FALSE;

	if(player(myindex())->moving)
		return FALSE;

	if(tempdata()->castedspell){
		if(gettickcount() > player(myindex())->attacktimer + 1)
			tempdata()->castedspell = FALSE;
		else
			return FALSE;
	}

	d = player(myindex())->dir;

	switch(tempdata()->dir){
	case DIR_NONE: return FALSE;
	case DIR_UP:
		player(myindex())->dir = DIR_UP;

		if(player(myindex())->y <= 0){
			if(map()->up) ismap = TRUE;
			return FALSE;
		}
		break;
	case DIR_DOWN:
		player(myindex())->dir = DIR_DOWN;

		if(player(myindex())->y >= MAX_MAPY - 1){
			if(map()->down) ismap = TRUE;
			return FALSE;
		}
		break;
	case DIR_LEFT:
		player(myindex())->dir = DIR_LEFT;

		if(player(myindex())->x <= 0){
			if(map()->left) ismap = TRUE;
			return FALSE;
		}
		break;

	case DIR_RIGHT:
		player(myindex())->dir = DIR_RIGHT;

		if(player(myindex())->x >= MAX_MAPX - 1){
			if(map()->right) ismap = TRUE;
			return FALSE;
		}
		break;
	}

	if(ismap){
		//map_editor_leave_map();
		request_new_map();
		tempdata()->gettingmap = TRUE;
		tempdata()->canmovenow = FALSE;
		return FALSE;
	}

	if(check_direction(player(myindex())->dir)){
		if(d != player(myindex())->dir)
			send_player_dir();

		return FALSE;
	}

	return TRUE;
}
예제 #15
0
PetscErrorCode cHamiltonianMatrix::initial_state(){
	gsl_matrix *H0 = gsl_matrix_alloc(L,L);
	gsl_matrix_set_zero(H0);
	for (int j = 0; j < L; ++j) {
	  if (judgeB==1) {
	    gsl_matrix_set(H0,j,j,gsl_vector_get(randV,j));
	  }
	  if (j==0) {
	    gsl_matrix_set(H0,j,j+1,-1.0);
	  } else if(j==L-1){
	    gsl_matrix_set(H0,j,j-1,-1.0);
	  } else {
	    gsl_matrix_set(H0,j,j+1,-1.0);
	    gsl_matrix_set(H0,j,j-1,-1.0);
	  }
	}
//	for (int i = 0; i < L; ++i) {
//		for (int j = 0; j < L; ++j) {
//			cout << gsl_matrix_get(H0,i,j) << '\t' ;
//		}
//		cout << endl;
//	}
	gsl_vector *eval = gsl_vector_alloc (L);
	gsl_matrix *evec = gsl_matrix_alloc (L, L);
	gsl_eigen_symmv_workspace * w_symmv = gsl_eigen_symmv_alloc (L);
	gsl_eigen_symmv (H0, eval, evec, w_symmv);
	gsl_eigen_symmv_free (w_symmv);
	gsl_eigen_symmv_sort (eval, evec, GSL_EIGEN_SORT_VAL_ASC);
//	for (int i = 0; i < L; ++i) {
//		cout << i+1 << "th eigenvalue is " <<  gsl_vector_get (eval, i) << endl;
//		gsl_vector_view evec_i = gsl_matrix_column (evec, i);
//		gsl_vector_fprintf (stdout, &evec_i.vector, "%g");
//	}
	// %initial state---zero temperature.
	ierr = VecCreate(PETSC_COMM_WORLD,&X1);CHKERRQ(ierr);
	ierr = VecSetSizes(X1,nlocal,DIM);CHKERRQ(ierr);
	ierr = VecSetFromOptions(X1);CHKERRQ(ierr);
	ierr = VecDuplicate(X1,&X2);CHKERRQ(ierr);
	gsl_vector * site2 = gsl_vector_alloc(N2);
	gsl_vector_set(site2,0,position);
	if (N2>1) for (int i = 1; i < N2; ++i) 	gsl_vector_set(site2,i,0);
	int p2 = myindex(site2,N2); //%index of impurity particle, also the position on the lattice
	rr = gsl_vector_alloc (DIM);
	// Translation of the matlab code...
//	rr=1-p2:1:L-p2;
//	mm=ones(dim,1);
//	rr=kron(rr',mm);%departure distance!
	for (int irr = 0; irr < dim2; ++irr) {
		for (int imm = 0; imm < dim; ++imm) {
			gsl_vector_set(rr,irr*dim+imm,1-p2+irr);
		}
	}
//	if (rank==0){
//		for (int ivar = 0; ivar < DIM; ++ivar) {
//			cout << gsl_vector_get(rr,ivar) << endl;
//		}
//	}
	double val_det;
	gsl_matrix *slater = gsl_matrix_alloc(N,N);
	gsl_permutation *p = gsl_permutation_alloc(slater->size1);
	int signum;
	for (int jdim = 0; jdim < dim; ++jdim) {
		for (int j1 = 0; j1 < N; ++j1) { // row
			for (int j2 = 0; j2 < N; ++j2) { // col
				gsl_matrix_set(slater,j1,j2,gsl_matrix_get(evec, gsl_matrix_get(basis1,j1,jdim)-1,j2));
			}
		}
		gsl_linalg_LU_decomp(slater , p , &signum); // cout << "rank " << rank << " has signum " << signum << endl;
		val_det = gsl_linalg_LU_det(slater , signum);
//		cout << jdim+1 << "th slater det is " << val_det << endl;
		ierr = VecSetValue(X1,(p2-1)*dim+jdim,val_det, INSERT_VALUES); // X1 is the initial state vector0.
	}
	ierr =  VecAssemblyBegin(X1); CHKERRQ(ierr);
	ierr =  VecAssemblyEnd(X1); CHKERRQ(ierr);
//	ierr = PetscViewerSetFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_MATLAB);
//	ierr = VecView(X1,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
	gsl_permutation_free (p);
	gsl_vector_free(site2);
	gsl_matrix_free(slater);
	gsl_vector_free (eval);
	gsl_matrix_free (evec);
	gsl_matrix_free (H0);
	return ierr;
}
예제 #16
0
void cHamiltonianMatrix::compute_hopping(int &nonzeros,const int spin_flag){
	int _N, _dim, q, jdim;
	spin_flag_condition(_N,_dim,spin_flag);

	gsl_matrix *basis;
	if (spin_flag == 1) { // spin up
		basis = basis1; // (value of pointer is copied)
		jdim = _jdim1;
	} else if (spin_flag == 2) { // spin down
		basis = basis2; // (value of pointer is copied)
		jdim = _jdim2;
	} else {
		cerr << "Wrong spin flag configuration. Check construct_basis call in fock member function." << endl;
		exit(1);
	}
	gsl_vector * site = gsl_vector_alloc(_N); // TODO: why in construct basis member function, the alloc size is _N+1?
//	if (rank == 0){ // only root CPU prints the result to screen.
//		for (int i = 0; i < _N; ++i) {
//			for (int j = 0; j < _dim; ++j) {
//				cout << gsl_matrix_get(basis,i,j) << '\t';
//			}
//			cout << "EOL" << endl;
//		}
//	}
	for (int jpar = 1; jpar <= _N; ++jpar) {
	// ------------- Start: Boundary term -------------
		if (boundary==0){ // #Periodic Boundary Conditions
			// -------- boundary terms (at site L) -----------------
			if (gsl_matrix_get(basis,jpar-1,jdim)==L  && gsl_matrix_get(basis,0,jdim)!=1) {
				if (_N==1) {
					q = 1;
				} else {
					/*
					 *      nnn=2:N;
                            site=basis1(:,jdim1);
                            site(nnn)=site(nnn-1);
                            site(1)=1;
					 */
					for (int nnn = 1; nnn < _N; ++nnn) {
						gsl_vector_set(site,nnn,gsl_matrix_get(basis,nnn-1,jdim));
					}
					gsl_vector_set(site,0,1);
//					for (int i = 0; i < _N; ++i) {
//						cout << gsl_vector_get(site,i) << '\t';
//					}
//					cout << endl;
					q = myindex(site,_N);
//					cout << "jpar = " << jpar << "q = " << q << endl;
				}
				compute_col_index(nonzeros,spin_flag,q);nonzeros++;
			}
			// -------- boundary terms (at site 1) -----------------
			if (gsl_matrix_get(basis,jpar-1,jdim)==1  && gsl_matrix_get(basis,_N-1,jdim)!=L) {
				if (_N==1) {
					q = L;
				} else {
				/*
				 * nnn=2:N;
					site=basis1(:,jdim1);
					site(nnn-1)=site(nnn);
					site(N)=L;
				 */
					for (int nnn = 1; nnn < _N; ++nnn) {
						gsl_vector_set(site,nnn-1,gsl_matrix_get(basis,nnn,jdim));
					}
					gsl_vector_set(site,_N-1,L);
					q = myindex(site,_N);
				}
				compute_col_index(nonzeros,spin_flag,q);nonzeros++;
			}
		}

		//else { // TODO: Do we consider boundary==1 case or other?
	// ------------- End: Boundary term -------------.
			if ( (jpar< _N && gsl_matrix_get(basis,jpar-1,jdim)+1<gsl_matrix_get(basis,jpar,jdim)) || (jpar==_N && gsl_matrix_get(basis,jpar-1,jdim)<L) ) {
//				cout << "i am the first condition" << endl;
//				cout << "jpar = " << jpar << " jdim = " << jdim << endl;

				for (int nnn = 0; nnn < _N; ++nnn) {
					gsl_vector_set(site,nnn,gsl_matrix_get(basis,nnn,jdim));
				}
				int tmpint = gsl_vector_get(site,jpar-1);
				gsl_vector_set(site,jpar-1,tmpint+1);

//				cout << "site is" << endl;
//				for (int var = 0; var < _N; ++var) {
//					cout << gsl_vector_get(site,var) << '\t';
//				}
//				cout << endl;

                q=myindex(site,_N);
                compute_col_index(nonzeros,spin_flag,q);nonzeros++;
			}
			if ((jpar==1 && gsl_matrix_get(basis,jpar-1,jdim)>1) || (jpar>1 && gsl_matrix_get(basis,jpar-1,jdim)-1>gsl_matrix_get(basis,jpar-2,jdim))) {
//				cout << "i am the second condition" << endl;
//				cout << "jpar = " << jpar << " jdim = " << jdim << endl;

				for (int nnn = 0; nnn < _N; ++nnn) {
					gsl_vector_set(site,nnn,gsl_matrix_get(basis,nnn,jdim));
				}
				int tmpint = gsl_vector_get(site,jpar-1);
				gsl_vector_set(site,jpar-1,tmpint-1);

//				cout << "site is" << endl;
//				for (int var = 0; var < _N; ++var) {
//					cout << gsl_vector_get(site,var) << '\t';
//				}
//				cout << endl;

				q=myindex(site,_N);
				compute_col_index(nonzeros,spin_flag,q);nonzeros++;
			}
		//}

	}
	gsl_vector_free (site);
}